﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CityGames
{
    public partial class FormSociosGestion : Form
    {
        static private FormContenedor contenedor;
        static private Socio socio = new Socio();
        private const int numeroDeSociosPorPagina =11;
        private int numeroDePaginaActual;
        private int numeroDePaginasMaximo;

        public DataSet dsSocios;

        public FormSociosGestion()
        {
            InitializeComponent();
        }

        private void FormSociosGestion_Load(object sender, EventArgs e)
        {
            try
            {
                contenedor = (FormContenedor)MdiParent;
                dsSocios = new DataSet();

                numeroDePaginaActual = 1;

                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han producido los siguientes errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void CargarDataGridViewSocios()
        {
            try
            {
                string sexo="";
                if (rbSexo1.Checked)
                    sexo = "Hombre";
                if (rbSexo2.Checked)
                    sexo = "Mujer";
                if (rbAmbosSexos.Checked)
                    sexo = "%";

                numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(socio.ObtenerNumeroDeSociosFiltrados(tbNombre.Text, tbApellidos.Text, tbDni.Text, sexo).ToString()) / numeroDeSociosPorPagina).ToString());
                if (numeroDePaginaActual > numeroDePaginasMaximo)
                    numeroDePaginaActual = numeroDePaginasMaximo;

                dsSocios = socio.FiltrarSocios(tbNombre.Text, tbApellidos.Text, tbDni.Text, sexo, numeroDeSociosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeSociosPorPagina);
                dgvSocios.DataSource = dsSocios;
                dgvSocios.DataMember = "SociosFiltrados";
                lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btMostrarTodos_Click(object sender, EventArgs e)
        {
            try
            {
                tbNombre.Text = "";
                tbNombre.Focus();
                tbApellidos.Text = "";
                tbDni.Text = "";
                rbAmbosSexos.Checked = true;

                numeroDePaginaActual = 1;

                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btVisualizar_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgvSocios.SelectedRows.Count == 1)
                {
                    contenedor.hijoFormSociosAlta.VisualizarDatos(dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]);
                    contenedor.hijoFormSociosAlta.Focus();
                }
                else
                {
                    MessageBox.Show("Debe seleccionar un socio.    ", "Seleccione un socio.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btEditar_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgvSocios.SelectedRows.Count == 1)
                {
                    contenedor.hijoFormSociosAlta.ModificarDatos(dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]);
                    contenedor.hijoFormSociosAlta.Focus();
                }
                else
                {
                    MessageBox.Show("Debe seleccionar un socio.    ", "Seleccione un socio.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        private void btEliminar_Click(object sender, EventArgs e)
        {
            bool correcto = true;
            try
            {
                if (dgvSocios.SelectedRows.Count > 0)
                {
                    if (MessageBox.Show("¿Realmente desea eliminar los socios seleccionados?", "Confirmar eliminar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {
                        foreach (DataGridViewRow row in dgvSocios.SelectedRows)
                        {
                            if (!BorrarSocio(dsSocios.Tables["SociosFiltrados"].Rows[row.Index]["Dni"].ToString()))
                            {
                                correcto = false;
                            }
                        }
                        if (correcto)
                        {
                            CargarDataGridViewSocios();
                            MessageBox.Show("Socio(s) eliminado(s) correctamente.    ", "Eliminación exitosa.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                            MessageBox.Show("Alguno de los socios que deseaba borrar no se ha borrado.    ", "Eliminación incorrecta.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    MessageBox.Show("Debe seleccionar al menos un socio.    ", "Seleccionar socios para eliminar.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void ModificarDatos(DataRow datos)
        {
            try
            {
                dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]["Nombre"] = datos["Nombre"];
                dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]["Apellidos"] = datos["Apellidos"];
                dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]["DNI"] = datos["DNI"];
                dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]["Sexo"] = datos["Sexo"];
                dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]["FechaNac"] = datos["FechaNac"];
                dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]["Direccion"] = datos["Direccion"];
                dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]["Localidad"] = datos["Localidad"];
                dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]["Provincia"] = datos["Provincia"];
                dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]["CP"] = datos["CP"];
                dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]["Telefono"] = datos["Telefono"];
                dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]["E_mail"] = datos["E_mail"];
                dsSocios.Tables["SociosFiltrados"].Rows[dgvSocios.SelectedRows[0].Index]["Foto"] = datos["Foto"];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public bool UpdateSocio(DataRow dr)
        {
            bool resultado = false;

            try
            {
                resultado = socio.UpdateSocio(dr);

            }
            catch (Exception ex)
            {
                throw ex;
            }
            return resultado;
        }

        public bool BorrarSocio(string dni)
        {
            bool resultado = false;

            try
            {
                resultado = socio.BorrarSocio(dni);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return resultado;
        }

        private void rbAmbosSexos_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void rbSexo1_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void rbSexo2_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void tbNombre_TextChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void tbApellidos_TextChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void tbDni_TextChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void bDGVPrimeraPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void bDGVPaginaAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual > 1)
                {
                    numeroDePaginaActual--;
                    CargarDataGridViewSocios();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void bDGVPaginaSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual < numeroDePaginasMaximo)
                {
                    numeroDePaginaActual++;
                    CargarDataGridViewSocios();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void bDGVUltimaPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = numeroDePaginasMaximo;
                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void dgvSocios_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }
}
